****************************** 데이터 타입 변환 함수와 연산자 ****************************** CAST ==== .. function:: CAST (cast_operand AS cast_target) **CAST** 연산자를 **SELECT** 문에서 어떤 값의 데이터 타입을 다른 데이터 타입으로 명시적으로 변환하는 데 사용할 수 있다. 조회 리스트 또는 **WHERE** 절의 값 수식을 다른 데이터 타입으로 변환할 수 있다. :param cast_operand: 다른 타입으로 변환할 값을 선언한다. :param cast_target: 변환할 타입을 지정한다. :rtype: cast_target 경우에 따라 **CAST** 연산자를 쓰지 않고 데이터 타입이 자동으로 변환될 수 있다. 이에 대한 자세한 내용은 :ref:`implicit-type-conversion` 을 참고한다. 문자열을 날짜/시간 타입으로 변환하는 것에 대한 자세한 내용은 :ref:`cast-string-to-datetime` 을 참고한다. CUBRID에서 **CAST** 연산자를 사용한 명시적인 타입 변환에 대해서 정리하면 다음의 표와 같다. +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **From \\ To** | **EN** | **AN** | **VC** | **FC** | **VB** | **FB** | **BLOB** | **CLOB** | **D** | **T** | **UT** | **DT** | **S** | **MS** | **SQ** | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **EN** | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **AN** | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **VC** | Yes | Yes | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **FC** | Yes | Yes | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **VB** | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **FB** | No | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **BLOB** | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **CLOB** | No | No | Yes | Yes | No | No | No | Yes | No | No | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **D** | No | No | Yes | Yes | No | No | No | No | Yes | No | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **T** | No | No | Yes | Yes | No | No | No | No | No | Yes | No | No | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **UT** | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **DT** | No | No | Yes | Yes | No | No | No | No | Yes | Yes | Yes | Yes | No | No | No | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **S** | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **MS** | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ | **SQ** | No | No | No | No | No | No | No | No | No | No | No | No | Yes | Yes | Yes | +----------------+--------+--------+--------+--------+--------+--------+----------+----------+-------+-------+--------+--------+-------+--------+--------+ `*` 이 경우에 **CAST** 연산은 값 수식과 변환할 데이터 타입이 같은 문자셋을 가질 경우에만 허용된다. * **데이터 타입 키** * **EN** : 정확한 수치(**INTEGER**, **SMALLINT**, **BIGINT**, **NUMERIC**, **DECIMAL**) * **AN** : 근사값 수치(**FLOAT/REAL**, **DOUBLE**) * **VC** : 가변 길이 문자열(**VARCHAR** (*n*)) * **FC** : 고정 길이 문자열(**CHAR** (*n*)) * **VB** : 가변 길이 비트열(**BIT VARYING** (*n*)) * **FB** : 고정 길이 비트열(**BIT** (*n*)) * **BLOB** : DB 외부에 저장하는 바이너리 데이터(**BLOB**) * **CLOB** : DB 외부에 저장하는 문자열 데이터(**CLOB**) * **D** : **DATE** * **T** : **TIME** * **DT** : **DATETIME** * **UT** : **TIMESTAMP** * **S** : **SET** * **MS** : **MULTISET** * **SQ** : **LIST** (= **SEQUENCE**) .. code-block:: sql --operation after casting character as INT type returns 2 SELECT (1+CAST ('1' AS INT)); :: (1+ cast('1' as integer)) =========================== 2 .. code-block:: sql --cannot cast the string which is out of range as SMALLINT SELECT (1+CAST('1234567890' AS SMALLINT)); :: ERROR: Cannot coerce value of domain "character" to domain "smallint". .. code-block:: sql --operation after casting returns 1+1234567890 SELECT (1+CAST('1234567890' AS INT)); :: (1+ cast('1234567890' as integer)) ==================================== 1234567891 .. code-block:: sql --'1234.567890' is casted to 1235 after rounding up SELECT (1+CAST('1234.567890' AS INT)); :: (1+ cast('1234.567890' as integer)) ==================================== 1236 .. code-block:: sql --'1234.567890' is casted to string containing only first 5 letters. SELECT (CAST('1234.567890' AS CHAR(5))); :: ( cast('1234.567890' as char(5))) ==================================== '1234.' .. code-block:: sql --numeric type can be casted to CHAR type only when enough length is specified SELECT (CAST(1234.567890 AS CHAR(5))); :: ERROR: Cannot coerce value of domain "numeric" to domain "character". .. code-block:: sql --numeric type can be casted to CHAR type only when enough length is specified SELECT (CAST(1234.567890 AS CHAR(11))); :: ( cast(1234.567890 as char(11))) ==================================== '1234.567890' .. code-block:: sql --numeric type can be casted to CHAR type only when enough length is specified SELECT (CAST(1234.567890 AS VARCHAR)); :: ( cast(1234.567890 as varchar)) ==================================== '1234.567890' .. code-block:: sql --string can be casted to time/date types only when its literal is correctly specified SELECT (CAST('2008-12-25 10:30:20' AS TIMESTAMP)); :: ( cast('2008-12-25 10:30:20' as timestamp)) ============================================= 10:30:20 AM 12/25/2008 .. code-block:: sql SELECT (CAST('10:30:20' AS TIME)); :: ( cast('10:30:20' as time)) ================================================== 10:30:20 AM .. code-block:: sql --string can be casted to TIME type when its literal is same as TIME’s. SELECT (CAST('2008-12-25 10:30:20' AS TIME)); :: ( cast('2008-12-25 10:30:20' as time)) ======================================== 10:30:20 AM .. code-block:: sql --string can be casted to TIME type after specifying its type of the string SELECT (CAST(TIMESTAMP'2008-12-25 10:30:20' AS TIME)); :: ( cast(timestamp '2008-12-25 10:30:20' as time)) ================================================== 10:30:20 AM .. code-block:: sql SELECT CAST('abcde' AS BLOB); :: cast('abcde' as blob) ====================== file:/home1/user1/db/tdb/lob/ces_743/ces_temp.00001283232024309172_1342 .. code-block:: sql SELECT CAST(B'11010000' as varchar(10)); :: cast(B'11010000' as varchar(10)) ==================================== 'd0' .. code-block:: sql SELECT CAST('1A' AS BLOB); :: cast('1A' as bit(16)) ================================= X'1a00' .. note:: * **CAST** 변환은 같은 문자셋을 가지는 데이터 타입끼리만 허용된다. * 근사치 데이터 타입(FLOAT, DOUBLE)이 정수형으로 변환되는 경우, 소수점 아래 자리가 반올림 처리된다. * 정확한 수치 데이터 타입(NUMERIC)이 정수형으로 변환되는 경우, 소수점 아래 자리가 반올림 처리된다. * 수치 데이터 타입을 문자열 타입으로 변환하는 경우, 문자열의 길이가 (모든 유효 숫자 자리 + 소수점) 이상이 되도록 충분하게 지정해야 한다. 그렇지 않으면 에러가 발생한다. * 문자열 타입 *A*\ 를 문자열 타입 *B*\ 로 변환하는 경우, *A*\ 의 길이 이상이 되도록 충분하게 지정되지 않으면 문자열 끝 부분이 삭제(truncate)되어 저장된다. * 문자열 타입 *A*\ 를 날짜/시간 데이터 타입 *B*\ 로 변환하는 경우, *A*\ 의 리터럴이 *B* 타입과 일치하는 경우에만 변환된다. 그렇지 않을 경우 에러가 발생한다. * 문자열로 저장된 수치 데이터는 명시적으로 타입 변환을 해주어야 산술 연산이 가능하다. DATE_FORMAT =========== .. function:: DATE_FORMAT (date, format) **DATE_FORMAT** 함수는 **DATE** 형식('*YYYY*-*MM*-*DD*' 또는 '*MM*/*DD*/*YYYY*')를 포함하는 문자열 또는 날짜/시간 타입(**DATE**, **TIMESTAMP**, **DATETIME**) 값을 지정된 날짜/시간 형식으로 변환하여 문자열로 출력하며, 리턴 값은 **VARCHAR** 타입이다. 지정할 *format* 인자는 아래의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. :ref:`날짜/시간 형식 2 ` 표는 :func:`DATE_FORMAT` 함수, :func:`TIME_FORMAT` 함수, :func:`STR_TO_DATE` 함수에서 사용된다. :param date: **DATE** 형식('*YYYY*-*MM*-*DD*' 또는 '*MM*/*DD*/*YYYY*')를 포함하는 문자열 또는 날짜/시간 타입(**DATE**, **TIMESTAMP**, **DATETIME**) 값이 지정될 수 있다. :param format: 출력 형식을 지정한다. '%'로 시작하는 형식 지정자(specifier)를 사용한다. :rtype: STRING *format* 인자가 지정되면 지정된 형식으로 날짜를 출력한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. 아래 :ref:`날짜/시간 형식 2 ` 표에서 월 이름, 요일 이름, 일 이름, 오전/오후 이름 등은 언어에 따라 다르다. .. _datetime-format2: **날짜/시간 형식 2** +--------------+--------------------------------------------------------------------------+ | format 값 | 의미 | +==============+==========================================================================+ | %a | Weekday, 영문 약어 (Sun, ..., Sat) | +--------------+--------------------------------------------------------------------------+ | %b | Month, 영문 약어 (Jan, ..., Dec) | +--------------+--------------------------------------------------------------------------+ | %c | Month(1, ..., 12) | +--------------+--------------------------------------------------------------------------+ | %D | Day of the month, 서수 영문 문자열(1st, 2nd, 3rd, ...) | +--------------+--------------------------------------------------------------------------+ | %d | Day of the month, 두 자리 숫자(01, ..., 31) | +--------------+--------------------------------------------------------------------------+ | %e | Day of the month (1, ..., 31) | +--------------+--------------------------------------------------------------------------+ | %f | Milliseconds, 세 자리 숫자 (000, ..., 999) | +--------------+--------------------------------------------------------------------------+ | %H | Hour, 24시간 기준, 두 자리 수 이상 (00, ..., 23, ..., 100, ...) | +--------------+--------------------------------------------------------------------------+ | %h | Hour, 12시간 기준 두 자리 숫자 (01, ..., 12) | +--------------+--------------------------------------------------------------------------+ | %I | Hour, 12시간 기준 두 자리 숫자 (01, ..., 12) | +--------------+--------------------------------------------------------------------------+ | %i | Minutes, 두 자리 숫자 (00, ..., 59) | +--------------+--------------------------------------------------------------------------+ | %j | Day of year, 세 자리 숫자 (001, ..., 366) | +--------------+--------------------------------------------------------------------------+ | %k | Hour, 24시간 기준, 한 자리 수 이상 (0, ..., 23, ..., 100, ...) | +--------------+--------------------------------------------------------------------------+ | %l | Hour, 12시간 기준 (1, ..., 12) | +--------------+--------------------------------------------------------------------------+ | %M | Month, 영문 문자열 (January, ..., December) | +--------------+--------------------------------------------------------------------------+ | %m | Month, 두 자리 숫자 (01, ..., 12) | +--------------+--------------------------------------------------------------------------+ | %p | AM or PM | +--------------+--------------------------------------------------------------------------+ | %r | Time, 12 시간 기준, 시:분:초 (hh:mi:ss AM or hh:mi:ss PM) | +--------------+--------------------------------------------------------------------------+ | %S | Seconds, 두 자리 숫자 (00, ..., 59) | +--------------+--------------------------------------------------------------------------+ | %s | Seconds, 두 자리 숫자 (00, ..., 59) | +--------------+--------------------------------------------------------------------------+ | %T | Time, 24시간 기준, 시:분:초 (hh:mi:ss) | +--------------+--------------------------------------------------------------------------+ | %U | Week, 두 자리 숫자, 일요일이 첫날인 주 단위 (00, ..., 53) | +--------------+--------------------------------------------------------------------------+ | %u | Week, 두 자리 숫자, 월요일이 첫날인 주 단위 (00, ..., 53) | +--------------+--------------------------------------------------------------------------+ | %V | Week, 두 자리 숫자, 일요일이 첫날인 주 단위 (01, ..., 53) | | | %X와 결합되어 사용 가능 | +--------------+--------------------------------------------------------------------------+ | %v | Week, 두 자리 숫자, 월요일이 첫날인 주 단위 (01, ..., 53) | | | %x 와 결합되어 사용 가능 | +--------------+--------------------------------------------------------------------------+ | %W | Weekday, 영문 문자열 (Sunday, ..., Saturday) | +--------------+--------------------------------------------------------------------------+ | %w | Day of the week, 숫자 인덱스 (0=Sunday, ..., 6=Saturday) | +--------------+--------------------------------------------------------------------------+ | %X | Year, 네 자리 숫자, 일요일이 첫날인 주 단위로 계산(0000, ..., 9999) | | | %V와 결합되어 사용 가능 | +--------------+--------------------------------------------------------------------------+ | %x | Year, 네 자리 숫자, 월요일이 첫날인 주 단위로 계산(0000, ..., 9999) | | | %v와 결합되어 사용 가능 | +--------------+--------------------------------------------------------------------------+ | %Y | Year, 네 자리 숫자 (0001, ..., 9999) | +--------------+--------------------------------------------------------------------------+ | %y | Year, 두 자리 숫자 (00, 01, ..., 99) | +--------------+--------------------------------------------------------------------------+ | %% | 특수문자 "%"를 그대로 출력하는 경우 | +--------------+--------------------------------------------------------------------------+ | %x | 형식 지정자로 쓰이지 않는 영문자 중 임의의 문자 x를 그대로 출력하는 경우 | +--------------+--------------------------------------------------------------------------+ .. code-block:: sql SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); :: date_format('2009-10-04 22:23:00', '%W %M %Y') ====================== 'Sunday October 2009' .. code-block:: sql SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s'); :: date_format('2007-10-04 22:23:00', '%H:%i:%s') ====================== '22:23:00' .. code-block:: sql SELECT DATE_FORMAT('1900-10-04 22:23:00', '%D %y %a %d %m %b %j'); :: date_format('1900-10-04 22:23:00', '%D %y %a %d %m %b %j') ====================== '4th 00 Thu 04 10 Oct 277' .. code-block:: sql SELECT DATE_FORMAT('1999-01-01', '%X %V'); :: date_format('1999-01-01', '%X %V') ====================== '1998 52' FORMAT ====== .. function:: FORMAT ( x , dec ) **FORMAT** 함수는 숫자 *x* 의 형식이 *#,###,###.#####* 이 되도록, 소수점 위 세 자리마다 자릿수 구분 기호로 구분하고 소수점 기호 아래 숫자가 *dec* 만큼 표현되도록 *dec* 의 아랫자리에서 반올림을 수행한 결과를 **VARCHAR** 타입으로 반환한다. :param x: 수치 값을 반환하는 임의의 연산식이다. :param dec: 소수점 이하 자릿수 :rtype: STRING 자릿수 구분 기호와 소수점 기호는 지정한 형식으로 출력한다. .. code-block:: sql SELECT FORMAT(12000.123456,3), FORMAT(12000.123456,0); :: format(12000.123456, 3) format(12000.123456, 0) ============================================ '12,000.123' '12,000' STR_TO_DATE =========== .. function:: STR_TO_DATE (string, format) **STR_TO_DATE** 함수는 인자로 주어진 문자열을 지정된 형식에 따라 해석하여 날짜/시간 값으로 변환하며, :func:`DATE_FORMAT` 함수와 반대로 동작한다. 리턴 값은 문자열에 포함된 날짜 또는 시간 부분에 따라 타입이 결정되며, **DATETIME**, **DATE**, **TIME** 타입 중 하나이다. :param string: 모든 문자열 타입이 지정될 수 있다. :param format: 문자열 해석을 위한 형식을 지정한다. %를 포함하는 문자열을 형식 지정자(specifier)로 사용한다. :func:`DATE_FORMAT` 함수의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. :rtype: DATETIME, DATE, TIME 지정할 *format* 인자는 :func:`DATE_FORMAT` 함수의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. *string*\ 에 유효하지 않은 날짜/시간 값이 포함되거나, *format*\ 에 지정된 형식 지정자를 적용하여 문자열을 해석할 수 없으면 에러를 리턴한다. *format* 인자가 지정되면 지정된 형식으로 *string* 을 해석한다. 주어진 인자와 대응하지 않는 *format*\ 이 주어지면 에러를 반환한다. 인자의 연, 월, 일에는 0을 입력할 수 없으나, 예외적으로 날짜와 시간이 모두 0인 값을 입력한 경우에는 날짜와 시간 값이 모두 0인 **DATE**, **DATETIME** 타입의 값을 반환한다. 그러나 JDBC 프로그램에서는 연결 URL 속성인 zeroDateTimeBehavior의 설정에 따라 동작이 달라진다. 이에 관한 자세한 내용은 :ref:`jdbc-connection-conf`\ 을 참고하면 된다. .. code-block:: sql SELECT STR_TO_DATE('01,5,2013','%d,%m,%Y'); :: str_to_date('01,5,2013', '%d,%m,%Y') ======================================= 05/01/2013 .. code-block:: sql SELECT STR_TO_DATE('May 1, 2013','%M %d,%Y'); :: str_to_date('May 1, 2013', '%M %d,%Y') ========================================= 05/01/2013 .. code-block:: sql SELECT STR_TO_DATE('13:30:17','%H:%i'); :: str_to_date('13:30:17', '%H:%i') ======================================== 01:30:00 PM .. code-block:: sql SELECT STR_TO_DATE('09:30:17 PM','%r'); :: str_to_date('09:30:17 PM', '%r') ======================================= 09:30:17 PM .. code-block:: sql SELECT STR_TO_DATE('0,0,0000','%d,%m,%Y'); :: str_to_date('0,0,0000', '%d,%m,%Y') ====================================== 00/00/0000 TIME_FORMAT =========== .. function:: TIME_FORMAT (time, format) **TIME_FORMAT** 함수는 **TIME** 형식(*HH*:*MI*:*SS*)을 포함하는 문자열 또는 **TIME**\ 을 포함하는 날짜/시간 타입(**TIME**, **TIMESTAMP**, **DATETIME**) 값을 지정된 시간 형식으로 변환하여 문자열로 출력하며, 리턴 값은 **VARCHAR** 타입이다. :param time: **TIME** 형식(*HH*:*MI*:*SS*)을 포함하는 문자열, **TIME**\ 을 포함하는 날짜/시간 타입(**TIME**, **TIMESTAMP**, **DATETIME**) 값을 지정할 수 있다. :param format: 문자열 해석을 위한 형식을 지정한다. %를 포함하는 문자열을 형식 지정자(specifier)로 사용한다. :func:`DATE_FORMAT` 함수의 :ref:`날짜/시간 형식 2 ` 표를 참고한다. :rtype: STRING *format* 인자가 지정되면 지정된 언어에 맞는 형식으로 날짜를 출력한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. .. code-block:: sql SELECT TIME_FORMAT('22:23:00', '%H %i %s'); :: time_format('22:23:00', '%H %i %s') ====================== '22 23 00' .. code-block:: sql SELECT TIME_FORMAT('23:59:00', '%H %h %i %s %f'); :: time_format('23:59:00', '%H %h %i %s %f') ====================== '23 11 59 00 000' .. code-block:: sql SELECT SYSTIME, TIME_FORMAT(SYSTIME, '%p'); :: SYS_TIME time_format( SYS_TIME , '%p') =================================== 08:46:53 PM 'PM' TO_CHAR(date_time) ================== .. function:: TO_CHAR ( date_time [, format[, date_lang_string_literal ]] ) **TO_CHAR** (date_time) 함수는 날짜/시간 타입(**TIME**, **DATE**, **TIMESTAMP**, **DATETIME**) 값을 :ref:`날짜/시간 형식 1 ` 표에 따라 문자열로 변환하여 이를 반환하며, 리턴 값의 타입은 **VARCHAR** 이다. :param date_time: 날짜/시간 타입의 연산식을 지정한다. 값이 **NULL** 인 경우에는 **NULL** 이 반환된다. :param format: 리턴 값의 형식을 지정한다. 값이 **NULL** 인 경우에는 **NULL** 이 반환된다. :param date_lang_string_literal: 리턴 값에 적용할 언어를 지정한다(:ref:`date_lang_string_literal 표 ` 참조). 기본값은 'en_US'이다. CUBRID_DATE_LANG 환경 변수를 지정하여 수정할 수 있다. :rtype: STRING *format* 인자가 지정되면 지정한 형식으로 *date_time*\ 을 출력한다. 자세한 형식은 :ref:`날짜/시간 형식 1 ` 표를 참고하면 된다. 포맷 인자가 생략되면, 아래의 기본 출력 형식에 따른 문자열로 변환한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. .. _tochar-default-datetime-format: **날짜/시간 타입에 대한 기본 출력 형식** +----------------+---------------+---------------------------+------------------------------+ | DATE | TIME | TIMESTAMP | DATETIME | +================+===============+===========================+==============================+ | 'MM/DD/YYYY' | 'HH:MI:SS AM' | 'HH:MI:SS AM MM/DD/YYYY' | 'HH:MI:SS.FF AM MM/DD/YYYY' | +----------------+---------------+---------------------------+------------------------------+ .. _datetime-format1: **날짜/시간 형식 1** +-----------------------+-----------------------------------------------+ | format 값 | 의미 | +=======================+===============================================+ | **CC** | 세기(Century) | +-----------------------+-----------------------------------------------+ | **YYYY** | 4자리 연도, 2자리 연도 | | , **YY** | | +-----------------------+-----------------------------------------------+ | **Q** | 분기(1, 2, 3, 4; 1월~3월 = 1) | +-----------------------+-----------------------------------------------+ | **MM** | 월(01-12; 1월 = 01) | | | *참고: 분(minute)은 MI이다.* | +-----------------------+-----------------------------------------------+ | **MONTH** | 월 이름 | +-----------------------+-----------------------------------------------+ | **MON** | 축약된 월 이름 | +-----------------------+-----------------------------------------------+ | **DD** | 날(1-31) | +-----------------------+-----------------------------------------------+ | **DAY** | 요일 이름 | +-----------------------+-----------------------------------------------+ | **DY** | 축약된 요일 이름 | +-----------------------+-----------------------------------------------+ | **D** 또는 **d** | 요일(1-7) | +-----------------------+-----------------------------------------------+ | **AM** 또는 **PM** | 오전/오후 | +-----------------------+-----------------------------------------------+ | **A.M.** | 마침표가 포함된 오전/오후 | | 또는 **P.M.** | | +-----------------------+-----------------------------------------------+ | **HH** | 시(1-12) | | 또는 **HH12** | | +-----------------------+-----------------------------------------------+ | **HH24** | 시(0-23) | +-----------------------+-----------------------------------------------+ | **MI** | 분(0-59) | +-----------------------+-----------------------------------------------+ | **SS** | 초(0-59) | +-----------------------+-----------------------------------------------+ | **FF** | 밀리초(0-999) | +-----------------------+-----------------------------------------------+ | \- / , . ; : "텍스트" | 구두점과 인용구는 그대로 결과에 표현됨 | +-----------------------+-----------------------------------------------+ .. _date_lang_string_literal-format: **date_lang_string_literal 표** +--------------+--------------------------------------------+ | **형식 구성 | **date_lang_string_literal** | | 요소** +------------------------------+-------------+ | | **'en_US'** | **'ko_KR'** | +==============+==============================+=============+ | **MONTH** | JANUARY | 1월 | +--------------+------------------------------+-------------+ | **MON** | JAN | 1 | +--------------+------------------------------+-------------+ | **DAY** | MONDAY | 월요일 | +--------------+------------------------------+-------------+ | **DY** | MON | 월 | +--------------+------------------------------+-------------+ | **Month** | January | 1월 | +--------------+------------------------------+-------------+ | **Mon** | Jan | 1 | +--------------+------------------------------+-------------+ | **Day** | Monday | 월요일 | +--------------+------------------------------+-------------+ | **Dy** | Mon | 월 | +--------------+------------------------------+-------------+ | **month** | january | 1월 | +--------------+------------------------------+-------------+ | **mon** | jan | 1 | +--------------+------------------------------+-------------+ | **day** | monday | 월요일 | +--------------+------------------------------+-------------+ | **Dy** | mon | 월 | +--------------+------------------------------+-------------+ | **AM** | AM | 오전 | +--------------+------------------------------+-------------+ | **Am** | Am | 오전 | +--------------+------------------------------+-------------+ | **am** | am | 오전 | +--------------+------------------------------+-------------+ | **A.M.** | A.M. | 오전 | +--------------+------------------------------+-------------+ | **A.m.** | A.m. | 오전 | +--------------+------------------------------+-------------+ | **a.m.** | a.m. | 오전 | +--------------+------------------------------+-------------+ | **PM** | PM | 오후 | +--------------+------------------------------+-------------+ | **Pm** | Pm | 오후 | +--------------+------------------------------+-------------+ | **pm** | pm | 오후 | +--------------+------------------------------+-------------+ | **P.M.** | P.M. | 오후 | +--------------+------------------------------+-------------+ | **P.m.** | P.m. | 오후 | +--------------+------------------------------+-------------+ | **p.m.** | p.m. | 오후 | +--------------+------------------------------+-------------+ **리턴 값 형식의 자릿수의 예** +-------------------------+---------------------------+---------------------------+ | 형식 구성 요소 | en_US 자릿수 | ko_KR 자릿수 | +=========================+===========================+===========================+ | **MONTH(Month, month)** | 9 | 4 | +-------------------------+---------------------------+---------------------------+ | **MON(Mon, mon)** | 3 | 2 | +-------------------------+---------------------------+---------------------------+ | **DAY(Day, day)** | 9 | 6 | +-------------------------+---------------------------+---------------------------+ | **DY(Dy, dy)** | 3 | 2 | +-------------------------+---------------------------+---------------------------+ | **HH12, HH24** | 2 | 2 | +-------------------------+---------------------------+---------------------------+ | "텍스트" | 텍스트의 길이 | 텍스트의 길이 | +-------------------------+---------------------------+---------------------------+ | 나머지 형식 | 주어진 형식의 길이와 같음 | 주어진 형식의 길이와 같음 | +-------------------------+---------------------------+---------------------------+ .. code-block:: sql --creating a table having date/time type columns CREATE TABLE datetime_tbl(a TIME, b DATE, c TIMESTAMP, d DATETIME); INSERT INTO datetime_tbl VALUES(SYSTIME, SYSDATE, SYSTIMESTAMP, SYSDATETIME); --selecting a VARCHAR type string from the data in the specified format SELECT TO_CHAR(b, 'DD, DY , MON, YYYY') FROM datetime_tbl; :: to_char(b, 'DD, DY , MON, YYYY') ====================== '04, THU , FEB, 2010' .. code-block:: sql SELECT TO_CHAR(c, 'HH24:MI, DD, MONTH, YYYY') FROM datetime_tbl; :: to_char(c, 'HH24:MI, DD, MONTH, YYYY') ====================== '16:50, 04, FEBRUARY , 2010' .. code-block:: sql SELECT TO_CHAR(d, 'HH12:MI:SS:FF pm, YYYY-MM-DD-DAY') FROM datetime_tbl; :: to_char(d, 'HH12:MI:SS:FF pm, YYYY-MM-DD-DAY') ====================== '04:50:11:624 pm, 2010-02-04-THURSDAY ' .. code-block:: sql SELECT TO_CHAR(TIMESTAMP'2009-10-04 22:23:00', 'Day Month yyyy'); :: to_char(timestamp '2009-10-04 22:23:00', 'Day Month yyyy') ====================== 'Sunday October 2009' TO_CHAR(number) ================ .. function:: TO_CHAR(number[, format ]) **TO_CHAR** (number) 함수는 수치형 데이터 타입을 :ref:`숫자 형식 `\ 에 맞는 문자열로 변환하여 **VARCHAR** 타입으로 반환한다. :param number: 숫자를 반환하는 수치형 데이터 타입의 연산식을 지정한다. 입력값이 NULL이면 결과로 NULL이 반환된다. 입력값이 문자열 타입이면 해당 문자열을 그대로 반환한다. :param format: 리턴 값의 형식을 지정한다. 값이 **NULL**\ 인 경우에는 **NULL**\ 이 반환된다. :rtype: STRING .. _tochar-number-format: **숫자 형식** +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | 형식 구성 요소 | 예제 | 설명 | +===================+==========+===============================================================================================================================+ | **9** | 9999 | "9"의 개수는 반환될 유효숫자 자릿수를 나타낸다. | | | | 숫자 인자에 대해 형식에서 지정된 유효숫자 자릿수가 부족하면, 소수부에 대해서는 반올림 연산을 수행한다. | | | | 숫자 인자의 정수부 자릿수보다 유효숫자 자릿수가 부족하면 #을 출력한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **0** | 0999 | 형식에서 지정된 유효숫자 자릿수가 충분한 경우, 정수부 앞 부분을 공백이 아닌 0으로 채워 반환한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **S** | S9999 | 지정된 위치에 양수/음수 부호를 출력한다. 부호는 문자열의 시작부분에만 사용할 수 있다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **C** | C9999 | 지정된 위치에 ISO 통화 기호를 반환한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **,** | 9,999 | 지정된 위치에 쉼표(",")를 반환한다. | | (쉼표) | | | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **.** | 9.999 | 지정된 위치에 마침표를 출력한다. | | (마침표) | | | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ | **EEEE** | 9.99EEEE | 과학적 기수법(scientific notation)을 반환한다. | +-------------------+----------+-------------------------------------------------------------------------------------------------------------------------------+ .. code-block:: sql --selecting a string casted from a number in the specified format SELECT TO_CHAR(12345,'S999999'), TO_CHAR(12345,'S099999'); :: to_char(12345, 'S999999') to_char(12345, 'S099999') ============================================ ' +12345' '+012345' .. code-block:: sql SELECT TO_CHAR(1234567,'9,999,999,999'); :: to_char(1234567, '9,999,999,999') ====================== ' 1,234,567' .. code-block:: sql SELECT TO_CHAR(1234567,'9.999.999.999'); :: to_char(1234567, '9.999.999.999') ====================== '#############' .. code-block:: sql SELECT TO_CHAR(123.4567,'99'), TO_CHAR(123.4567,'999.99999'), TO_CHAR(123.4567,'99999.999'); :: to_char(123.4567, '99') to_char(123.4567, '999.99999') to_char(123.4567, '99999.999') ================================================================== '##' '123.45670' ' 123.457' TO_DATE ======= .. function:: TO_DATE(string [,format[,date_lang_string_literal]]) **TO_DATE** 함수는 인자로 지정된 날짜 형식을 기준으로 문자열을 해석하여, 이를 **DATE** 타입의 값으로 변환하여 반환한다. 날짜 형식은 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: 날짜 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 ` 표를 참고한다. 값이 **NULL**\ 이면 결과로 **NULL**\ 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. 'en_US' 또는 'ko_KR'이 올 수 있다. **CUBRID_DATE_LANG** 환경 변수를 지정하여 수정할 수 있다. :rtype: DATE *format* 인자가 지정되면 지정한 형식으로 *string*\ 을 해석한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. .. code-block:: sql --selecting a date type value casted from a string in the specified format SELECT TO_DATE('12/25/2008'); :: to_date('12/25/2008') =============================================== 12/25/2008 .. code-block:: sql SELECT TO_DATE('25/12/2008', 'DD/MM/YYYY'); :: to_date('25/12/2008', 'DD/MM/YYYY') =============================================== 12/25/2008 .. code-block:: sql SELECT TO_DATE('081225', 'YYMMDD'); :: to_date('081225', 'YYMMDD', 'en_US') =============================================== 12/25/2008 .. code-block:: sql SELECT TO_DATE('2008-12-25', 'YYYY-MM-DD'); :: to_date('2008-12-25', 'YYYY-MM-DD', 'en_US') =============================================== 12/25/2008 TO_DATETIME =========== .. function:: TO_DATETIME (string [,format [,date_lang_string_literal]]) **TO_DATETIME** 함수는 인자로 지정된 **DATETIME** 형식을 기준으로 문자열을 해석하여, 이를 **DATETIME** 타입의 값으로 변환하여 반환한다. **DATETIME** 형식은 :func:`TO_CHAR` 함수의 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: DATETIME 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 `\을 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. 'en_US' 또는 'ko_KR'이 올 수 있다. CUBRID_DATE_LANG 환경 변수를 지정하여 수정할 수 있다. :rtype: DATETIME *format* 인자가 지정되면 지정한 형식으로 *string* 을 해석한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. .. code-block:: sql --selecting a datetime type value casted from a string in the specified format SELECT TO_DATETIME('13:10:30 12/25/2008'); :: to_datetime('13:10:30 12/25/2008') ===================================== 01:10:30.000 PM 12/25/2008 .. code-block:: sql SELECT TO_DATETIME('08-Dec-25 13:10:30.999', 'YY-Mon-DD HH24:MI:SS.FF'); :: to_datetime('08-Dec-25 13:10:30.999', 'YY-Mon-DD HH24:MI:SS.FF') ===================================== 01:10:30.999 PM 12/25/2008 .. code-block:: sql SELECT TO_DATETIME('DATE: 12-25-2008 TIME: 13:10:30.999', '"DATE:" MM-DD-YYYY "TIME:" HH24:MI:SS.FF'); :: to_datetime('DATE: 12-25-2008 TIME: 13:10:30.999', '"DATE:" MM-DD-YYYY "TIME:" HH24:MI:SS.FF') ===================================== 01:10:30.999 PM 12/25/2008 TO_NUMBER ========= .. function:: TO_NUMBER(string [, format ]) **TO_NUMBER** 함수는 인자로 지정된 숫자 형식을 기준으로 문자열을 해석하여, 이를 **NUMERIC** 타입으로 변환하여 반환한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: 숫자로 반환할 값의 형식을 지정하며, :ref:`숫자 형식 ` 표를 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :rtype: NUMERIC *format* 인자가 지정되면 지정한 형식으로 *string* 을 해석한다. .. code-block:: sql --selecting a number casted from a string in the specified format SELECT TO_NUMBER('-1234'); :: to_number('-1234') ============================================ -1234 .. code-block:: sql SELECT TO_NUMBER('12345','999999'); :: to_number('12345', '999999') ============================================ 12345 .. code-block:: sql SELECT TO_NUMBER('12,345.67','99,999.999'); :: to_number('12,345.67', '99,999.999') ====================== 12345.670 .. code-block:: sql SELECT TO_NUMBER('12345.67','99999.999'); :: to_number('12345.67', '99999.999') ============================================ 12345.670 TO_TIME ======= .. function:: TO_TIME(string [,format [,date_lang_string_literal]]) **TO_TIME** 함수는 인자로 지정된 시간 형식을 기준으로 문자열을 해석하여, 이를 TIME 타입의 값으로 변환하여 반환한다. 시간 형식은 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: TIME 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 ` 표를 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. 'en_US', 'ko_KR'이 올 수 있다. CUBRID_DATE_LANG 환경 변수를 지정하여 수정할 수 있다. :rtype: TIME *format* 인자가 지정되면 지정한 형식으로 *string* 을 해석한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. .. code-block:: sql --selecting a time type value casted from a string in the specified format SELECT TO_TIME ('13:10:30'); :: to_time('13:10:30') ============================================= 01:10:30 PM .. code-block:: sql SELECT TO_TIME('HOUR: 13 MINUTE: 10 SECOND: 30', '"HOUR:" HH24 "MINUTE:" MI "SECOND:" SS'); :: to_time('HOUR: 13 MINUTE: 10 SECOND: 30', '"HOUR:" HH24 "MINUTE:" MI "SECOND:" SS', 'en_US') ============================================= 01:10:30 PM .. code-block:: sql SELECT TO_TIME ('13:10:30', 'HH24:MI:SS'); :: to_time('13:10:30', 'HH24:MI:SS') ============================================= 01:10:30 PM .. code-block:: sql SELECT TO_TIME ('13:10:30', 'HH12:MI:SS'); :: ERROR: Conversion error in date format. TO_TIMESTAMP ============ .. function:: TO_TIMESTAMP(string [, format [,date_lang_string_literal]]) **TO_TIMESTAMP** 함수는 인자로 지정된 타임스탬프 형식을 기준으로 문자열을 해석하여, 이를 **TIMESTAMP** 타입의 값으로 변환하여 반환한다. 타임스탬프 형식은 :ref:`날짜/시간 형식 1 `\ 을 참고한다. :param string: 문자열을 반환하는 임의의 연산식이다. 값이 NULL이면 결과로 NULL이 반환된다. :param format: TIMESTAMP 타입으로 변환할 값의 형식을 지정하며, :ref:`날짜/시간 형식 1 ` 표를 참고한다. 값이 **NULL** 이면 결과로 **NULL** 이 반환된다. :param date_lang_string_literal: 입력 값에 적용할 언어를 지정한다. 'en_US', 'ko_KR'이 올 수 있다. CUBRID_DATE_LANG 환경 변수를 지정하여 수정할 수 있다. :rtype: TIMESTAMP *format* 인자가 지정되면 지정한 형식으로 *string* 을 해석한다. 주어진 문자열과 대응하지 않는 *format* 인자가 지정되면 에러를 반환한다. .. code-block:: sql --selecting a timestamp type value casted from a string in the specified format SELECT TO_TIMESTAMP('13:10:30 12/25/2008'); :: to_timestamp('13:10:30 12/25/2008') ====================================== 01:10:30 PM 12/25/2008 .. code-block:: sql SELECT TO_TIMESTAMP('08-Dec-25 13:10:30', 'YY-Mon-DD HH24:MI:SS'); :: to_timestamp('08-Dec-25 13:10:30', 'YY-Mon-DD HH24:MI:SS') ====================================== 01:10:30 PM 12/25/2008 .. code-block:: sql SELECT TO_TIMESTAMP('YEAR: 2008 DATE: 12-25 TIME: 13:10:30', '"YEAR:" YYYY "DATE:" MM-DD "TIME:" HH24:MI:SS'); :: to_timestamp('YEAR: 2008 DATE: 12-25 TIME: 13:10:30', '"YEAR:" YYYY "DATE:" MM-DD "TIME:" HH24:MI:SS') ====================================== 01:10:30 PM 12/25/2008